package br.ufmt.bean;

import java.util.ArrayList;

import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.ufmt.baseDeDados.Midias;
import br.ufmt.baseDeDados.Obras;
import br.ufmt.exception.AtorException;
import br.ufmt.exception.MidiaException;
import br.ufmt.model.Ator;
import br.ufmt.model.Midia;
import br.ufmt.model.MidiaEnum;
import br.ufmt.model.Obra;
import br.ufmt.model.TabelaPreco;

@ManagedBean
@SessionScoped
public class MidiaBean {

	private static List<Midia> midias = Midias.getMidias();
	private static TabelaPreco tabelaPreco;
	private Obra obra;
	private String obraId;
	private String tipoDeMidia;
	private MidiaEnum tipoMidia;
	private int quantidade;

	public List<Midia> getMidias() {
		return midias;
	}

	public void setMidias(List<Midia> midias) {
		MidiaBean.midias = midias;
	}

	public TabelaPreco getTabelaPreco() {
		return tabelaPreco;
	}

	public float getValorLocacao(Midia midia) {
		return TabelaPreco.getValorLocacao(midia);
	}

	public void setTabelaPreco(TabelaPreco tabelaPreco) {
		MidiaBean.tabelaPreco = tabelaPreco;
	}

	public Obra getObra() {
		return obra;
	}

	public String getObraId() {
		return obraId;
	}

	public void setObraId(String obraId) {
		this.obraId = obraId;

		this.setObra(ObraBean.getObraPorId(obraId));
	}

	public void setObra(Obra obra) {
		this.obra = obra;
	}

	public String gettipoDeMidia() {
		return tipoDeMidia;
	}

	public void settipoDeMidia(String tipoDeMidia) {
		if (tipoDeMidia.equals("BD")) {
			this.tipoMidia = MidiaEnum.BD;
		}
		if (tipoDeMidia.equals("DVD")) {
			this.tipoMidia = MidiaEnum.DVD;
		}
	}

	public int getQuantidade() {
		return quantidade;
	}

	public void setQuantidade(int quantidade) {
		this.quantidade = quantidade;
	}

	public static Midia getMidiaPorId(String id) {
		for (Midia midia: MidiaBean.midias) {
			if (midia.getId().equals(id)) {
				return midia;
			}
		}
		return null;
	}

	public void adicionaMidia() {

		// Verificando se já existe a mídia que está tentando adicionar.
		// Caso exista, apenas realiza a adição de nova mídia no mesmo objeto.

		try {

			boolean adicionouMidia = false;
			for (Midia m : MidiaBean.midias) {
				if (m.getObra().getId().equals(obra.getId())
						&& m.getTipoMidia().equals(tipoMidia)) {
					m.setQtde(m.getQtde() + quantidade);
					adicionouMidia = true;
					FacesMessage msg = new FacesMessage(
							"Mídia já existente, quantidade adicionada a mídia!");
					FacesContext.getCurrentInstance().addMessage("form", msg);
				}
			}
			if (adicionouMidia == false) {
				Midia midia = new Midia(obra, tipoMidia, quantidade);
				FacesMessage msg = new FacesMessage(
						"Mídia adicionada com Sucesso!");
				FacesContext.getCurrentInstance().addMessage("form", msg);
				midias.add(midia);
			}
			this.setObra(null);
			this.setQuantidade(0);
			this.setObra(null);

		} catch (MidiaException e) {
			FacesMessage msg = new FacesMessage(e.getMessage());
			FacesContext.getCurrentInstance().addMessage("form", msg);
		}

	}

	public void excluir() {
		String id = (String) FacesContext.getCurrentInstance()
				.getExternalContext().getRequestParameterMap().get("id");
		Midia midia = MidiaBean.getMidiaPorId(id);
		midias.remove(midia);

	}
}
